##
##    This file is part of Metrix.
##
##    Metrix is free software: you can redistribute it and/or modify
##    it under the terms of the GNU General Public License as published by
##    the Free Software Foundation, either version 3 of the License, or
##    (at your option) any later version.
##
##    Metrix is distributed in the hope that it will be useful,
##    but WITHOUT ANY WARRANTY; without even the implied warranty of
##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##    GNU General Public License for more details.
##
##    You should have received a copy of the GNU General Public License
##    along with Metrix.  If not, see <http://www.gnu.org/licenses/>.
##

class Version < ActiveRecord::Base
	belongs_to :producto, :dependent => true
	has_many :incidentes, :dependent => :destroy

	#Para validar que no se puedan insertar numeros de Version repetidos para un Producto determinado
	validates_uniqueness_of :numero, :scope => :producto_id, :message => "ya existente"

	validates_presence_of :producto, :numero, :KLOC, :fecha_inicio, :fecha_fin_estimada, :message => "es un campo obligatorio"
	validates_date :fecha_inicio, :message => "es una fecha invalida"
	validates_date :fecha_fin_estimada, :message => "es una fecha invalida", 
					:after => :fecha_inicio, :after_message => "debe ser posterior a la fecha de inicio"
	validates_date :fecha_fin_real, :message => "es una fecha invalida", 
					:after => :fecha_inicio, :after_message => "debe ser posterior a la fecha de inicio", 
					:allow_nil => true
	validates_presence_of :fecha_fin_real,
		:if => :hsHombreRealesAsignadas?, 
		:message => "debe existir si se asignaron las horas hombre reales"
	validates_presence_of :fecha_fin_real,
		:if => :recursosRealesAsignados?, 
		:message => "debe existir si se asignaron los recursos reales"
	
	validates_numericality_of :recursos_reales, :hs_hombre_reales, :only_integer => true, #:greater_than => 0 ,
								:if => :versionLanzada? ,
								:message => "debe ser un entero positivo si la version tiene fecha de fin real establecida"

	validates_inclusion_of :recursos_reales, :hs_hombre_reales, :in => 1..2147483647,
								:if => :versionLanzada? ,
								:message => "debe ser un entero positivo (de 1 a 2147483647) si la version tiene fecha de fin real establecida"

	validates_numericality_of :KLOC, :hs_hombre_estimadas, :recursos_estimados,
								:only_integer => true, #:greater_than => 0 ,
								:message => "debe ser un entero positivo"

	validates_inclusion_of :KLOC, :hs_hombre_estimadas, :recursos_estimados, :in => 1..2147483647,
								:message => "debe ser un entero positivo (de 1 a 2147483647)"

	validates_format_of :numero, :with => /^[0-9]*(\.[0-9]*)*(|\ beta|\ alfa)*$/

	def to_s
		producto = Producto.find(producto_id)
		producto.nombre + " #{numero}"
	end

	def nombreCompleto
		producto = Producto.find(producto_id)
		producto.nombre + " #{numero}"
	end

  def versionLanzada?
		fecha_fin_real != nil
  end

	def hsHombreRealesAsignadas?
		hs_hombre_reales != nil
	end

	def recursosRealesAsignados?
		recursos_reales != nil
	end

end

